// var trap = function (height) {
//   const n = height.length;
//   // 前缀最大值数组
//   const pre_max = new Array(n).fill(0);
//   // 前缀的第0项就是数组的第0项
//   pre_max[0] = height[0];
//   for (let i = 1; i < n; i++) {
//     // 当前i的前缀最大值等于上一个前缀最大值和当前高度的比较
//     pre_max[i] = Math.max(pre_max[i - 1], height[i]);
//   }

//   // 后缀最大值数组,从右往左遍历
//   const suf_max = new Array(n).fill(0);
//   suf_max[n - 1] = height[n - 1];
//   for (let i = n - 2; i >= 0; i--) {
//     suf_max[i] = Math.max(suf_max[i + 1], height[i]);
//   }

//   // 然后来算答案
//   let ans = 0;
//   for (let i = 0; i < n; i++) {
//     ans += Math.min(pre_max[i], suf_max[i]) - height[i];
//   }
//   return ans;
// };

var trap = function (height) {
  const n = height.length;
  let ans = 0,
    left = 0,
    right = n - 1,
    pre_max = 0,
    suf_max = 0;
  while (left < right) {
    pre_max = Math.max(pre_max, height[left]);
    suf_max = Math.max(suf_max, height[right]);
    if (pre_max < suf_max) {
      ans += pre_max - height[left];
      left++;
    } else {
      ans += suf_max - height[right];
      right--;
    }
  }
  return ans;
};

console.log(trap([4, 2, 0, 3, 2, 5]));
